package lib

import (
	"goloader"
	"reflect"
)

// Ptrreflect 设置reflect库指针
func Ptrreflect(symPtr map[string]uintptr) {
	goloader.RegFunc(symPtr, "reflect.Copy", reflect.Copy)
	goloader.RegFunc(symPtr, "reflect.DeepEqual", reflect.DeepEqual)
	goloader.RegFunc(symPtr, "reflect.Select", reflect.Select)
	goloader.RegFunc(symPtr, "reflect.Swapper", reflect.Swapper)
	goloader.RegFunc(symPtr, "reflect.ArrayOf", reflect.ArrayOf)
	goloader.RegFunc(symPtr, "reflect.ChanOf", reflect.ChanOf)
	goloader.RegFunc(symPtr, "reflect.FuncOf", reflect.FuncOf)
	goloader.RegFunc(symPtr, "reflect.MapOf", reflect.MapOf)
	goloader.RegFunc(symPtr, "reflect.PtrTo", reflect.PtrTo)
	goloader.RegFunc(symPtr, "reflect.SliceOf", reflect.SliceOf)
	goloader.RegFunc(symPtr, "reflect.StructOf", reflect.StructOf)
	goloader.RegFunc(symPtr, "reflect.TypeOf", reflect.TypeOf)
	goloader.RegFunc(symPtr, "reflect.Append", reflect.Append)
	goloader.RegFunc(symPtr, "reflect.AppendSlice", reflect.AppendSlice)
	goloader.RegFunc(symPtr, "reflect.Indirect", reflect.Indirect)
	goloader.RegFunc(symPtr, "reflect.MakeChan", reflect.MakeChan)
	goloader.RegFunc(symPtr, "reflect.MakeFunc", reflect.MakeFunc)
	goloader.RegFunc(symPtr, "reflect.MakeMap", reflect.MakeMap)
	goloader.RegFunc(symPtr, "reflect.MakeMapWithSize", reflect.MakeMapWithSize)
	goloader.RegFunc(symPtr, "reflect.MakeSlice", reflect.MakeSlice)
	goloader.RegFunc(symPtr, "reflect.New", reflect.New)
	goloader.RegFunc(symPtr, "reflect.NewAt", reflect.NewAt)
	goloader.RegFunc(symPtr, "reflect.ValueOf", reflect.ValueOf)
	goloader.RegFunc(symPtr, "reflect.Zero", reflect.Zero)
	goloader.RegTypes(symPtr, reflect.ChanDir(0), reflect.Kind(0), reflect.SelectDir(0))
	goloader.RegTypes(symPtr,
		new(reflect.MapIter),
		new(reflect.Method),
		new(reflect.SelectCase),
		new(reflect.SliceHeader),
		new(reflect.StringHeader),
		new(reflect.StructField),
		new(reflect.StructTag),
		new(reflect.Value),
		new(reflect.ValueError))
}
